import { fileURLToPath, URL } from 'node:url';

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueDevTools from 'vite-plugin-vue-devtools';

// 引入自动生成路由插件
import Pages from 'vite-plugin-pages';

// 引入自动引入组件插件
import Components from 'unplugin-vue-components/vite';

// 引入自动引入Hook插件
import AutoImport from 'unplugin-auto-import/vite';

// 引入路由规则
import rules from './src/routers/rules';

// https://vite.dev/config/
export default defineConfig({
    plugins: [
        vue(),
        // vueDevTools(),
        Pages({
            dirs: 'src/views', // 需要生成路由的组件目录
            exclude: ['**/components/*.vue'], // 排除在外的目录，即所有 components 目录下的 .vue 文件都不会生成路由
            // 路由扩展
            extendRoute(route)
            {
                route = {
                    ...route,
                    meta:{
                        IsLogin:true
                    }
                }

                // 如果不需要登录路由能进入这里说明IsLogin属性等于false
                if(rules.includes(route.path))
                {
                    route.meta.IsLogin = false;
                }

                return route;
            }
        }),
        Components({
            // 指定组件位置，默认是src/components
            dirs: ['src/components'],
            // ui库解析器
            // resolvers: [ElementPlusResolver()],
            extensions: ['vue'],
        }),
        AutoImport({
            // 指定引入哪些插件
            imports: ['vue', 'vue-router', 'pinia'],
            // 生成全局自动引入配置文件
            dts: './src/auto-imports.d.ts',
        }),
    ],
    resolve: {
        alias: {
            '@': fileURLToPath(new URL('./src', import.meta.url)),
        },
    },
    // 服务器的配置
    server: {
        // 反向代理
        proxy: {
            '/shop': {
                // target: 'http://www.fast.com/shop', // 反向代理的目标地址
                target: 'http://www.fastpro.zmlover.cn/shop',// 线上
                changeOrigin: true, // 允许跨域
                // 替换掉shop前缀 防止多个shop地址
                rewrite: (path) => path.replace(/^\/shop/, ''),
            },
        },
    },
});
